package config

import (
	"fmt"
	"github.com/spf13/viper"
	"os"
	"path/filepath"
	"strings"
)

func parseConfig(configFile string) (*viper.Viper, error) {
	// 1. 检查配置文件是否存在
	if _, err := os.Stat(configFile); err != nil {
		return nil, err // 文件不存在或无法访问
	}

	// 2. 处理文件路径（获取绝对路径）
	absPath, err := filepath.Abs(configFile)
	if err != nil {
		return nil, err // 无法获取绝对路径
	}

	// 3. 提取目录、文件名和扩展名
	dir := filepath.Dir(absPath)                               // 配置文件所在目录
	fileName := filepath.Base(absPath)                         // 带扩展名的文件名（如"config.yaml"）
	fileExt := strings.TrimPrefix(filepath.Ext(fileName), ".") // 提取扩展名（如"yaml"）

	// 4. 检查扩展名是否有效（避免空扩展名导致的解析失败）
	if fileExt == "" {
		return nil, os.ErrInvalid // 无扩展名，无法确定配置类型
	}

	// 5. 创建独立的Viper实例（避免全局实例冲突）
	v := viper.New()
	v.SetConfigName(strings.TrimSuffix(fileName, "."+fileExt)) // 不带扩展名的文件名
	v.SetConfigType(fileExt)                                   // 配置文件类型（如"yaml"）
	v.AddConfigPath(dir)                                       // 配置文件所在目录

	// 6. 读取配置文件
	if err := v.ReadInConfig(); err != nil {
		return nil, err // 读取失败（如格式错误）
	}

	return v, nil
}

var (
	V *viper.Viper // 已有的配置实例

)

func init() {
	var err error
	// 解析配置文件
	V, err = parseConfig("/etc/fastdp-agent/config.toml")
	if err != nil {
		fmt.Printf("配置文件解析失败%s\n", err)
		os.Exit(1)
	}
}
